package com.taotaojs.mybootsuper.service2impl;

import com.taotaojs.mybootsuper.bean.BaseBean;
import com.taotaojs.mybootsuper.mapper.MySqlBuild;

import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * @author: TaoTaojs
 * @Date: 2020/7/14 9:53 AM
 * @Description: <h1>通用Service接口对象</h1>
 * <h2>简介</h2>
 * 通用Service接口对象
 * <h3>主要功能：</h3>
 * <ol>
 *     <li></li>
 * </ol>
 * @关联类:
 * @参考链接：
 * @History: <br/>
 * <author>        <time>                      <version>          <desc>
 * TaoTaojs        2020/7/14 9:53 AM                V1.0          通用Service接口对象
 */
public interface IMyComService<T extends BaseBean> extends IMyBasicService<T> {

    /**
     * 根据mysqlBuild获取数据
     * @param mysql
     * @return
     */
    List<T> getComList(MySqlBuild<T> mysql);

    /**
     * 根据mysqlBuild获取数据并转换为Map类型
     * @param mysql
     * @param <K>
     * @return
     */
    <K> Map<K, T> getComMap(MySqlBuild<T> mysql);

    /**
     * 根据ids查询所有对应的对象
     * @param ids
     * @return
     */
    List<T> findByIds(Collection<Integer> ids);

    /**
     * 根据mysqlBuild查询所有对象列表
     * @param mysql
     * @return
     */
    List<T> findByObjList(MySqlBuild<T> mysql);

    /**
     * 根据ids查询出所有对象，并使用逻辑将他整理成Map对象
     * @param ids
     * @return
     */
    Map<Integer, T> findByObjMap(Collection<Integer> ids);
    /**
     * 根据mysqlBuild查询出所有对象，并使用逻辑将他整理成Map对象
     * @param mysql
     * @return
     */
    Map<Integer, T> findByObjMap(MySqlBuild<T> mysql);

    /**
     * 根据mysqlBuild查询出所有对象，并使用key类型将他们整理成Map对象
     * @param mysql
     * @param key
     * @param <K>
     * @return
     */
    <K> Map<K, T> findObjMap(MySqlBuild<T> mysql, String key);

    /**
     * 根据开始时间与结束时间查询数据
     * @param startDate
     * @param stopDate
     * @return
     */
    List<T> findByStartAndStopDate(Date startDate, Date stopDate);

    /**
     * 根据开始时间结束时间还有时间字段来查询
     * @param startDate
     * @param stopDate
     * @param dateColumn
     * @return
     */
    List<T> findByStartAndStopDate(Date startDate, Date stopDate, String dateColumn);



}
